package com.johann.leetcode;

import java.util.List;
import java.util.Stack;

/*

给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。

有效字符串需满足：

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1：

输入：s = "()"
输出：true
示例 2：

输入：s = "()[]{}"
输出：true
示例 3：

输入：s = "(]"
输出：false
示例 4：

输入：s = "([)]"
输出：false
示例 5：

输入：s = "{[]}"
输出：true
提示：

1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
Related Topics
栈
字符串


* */
public class T20_ValidBracket {
    public boolean isValid(String s) {
        Stack<Character> stack=new Stack<>();
        stack.push(s.charAt(0));
        boolean flag = false;
        for (int i = 1; i < s.toCharArray().length; i++) {
            Character c = s.charAt(i);
            if (!stack.empty()) {
                if (judgeBracket(stack.peek(),c)) {
                    stack.pop();
                    flag=true;
                }
            }
            if(!flag){
                stack.push(s.charAt(i));
            }
            flag=false;
        }
        return stack.empty();
    }

    public boolean judgeBracket(Character a,Character b){
        return a == '(' && b == ')' || a=='[' && b ==']' || a=='{' && b =='}';
    }

    public static void main(String[] args) {
        System.out.println(new T20_ValidBracket().isValid("()"));
    }

}
